package org.example.erat.composite;

import org.example.erat.entity.ClassEntity;
import org.example.erat.entity.Course;
import org.example.erat.entity.Experiment;
import org.example.erat.entity.Student;

import java.util.List;
import java.util.Map;

/**
 * 统计组件接口
 * 用于实现组合模式
 */
public interface StatisticsComponent {
    
    /**
     * 执行统计
     * @param classEntity 班级
     * @param course 课程
     * @param students 学生列表
     * @param experiments 实验列表
     * @param reportData 报告数据
     * @return 统计结果
     */
    Map<String, Object> execute(ClassEntity classEntity, Course course, 
                               List<Student> students, List<Experiment> experiments, 
                               Map<String, Object> reportData);
    
    /**
     * 获取组件名称
     * @return 组件名称
     */
    String getName();
    
    /**
     * 添加子组件
     * @param component 子组件
     */
    void addComponent(StatisticsComponent component);
    
    /**
     * 移除子组件
     * @param component 子组件
     */
    void removeComponent(StatisticsComponent component);
    
    /**
     * 获取子组件
     * @param name 组件名称
     * @return 子组件
     */
    StatisticsComponent getComponent(String name);
}
